加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_梅州站长网 (https://www.0753zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP变量 Shell 字符串

发布时间:2022-09-27 15:38:57 所属栏目:PHP教程 来源:
导读:  在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像#!/bin/shPHP变量,它同样也可以改为#!/bin/bash。

  #!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

 
  在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像#!/bin/shPHP变量,它同样也可以改为#!/bin/bash。
 
  #!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
 
  运行 Shell 脚本有两种方法:
 
  1、作为可执行程序
 
  将上面的代码保存为 test.sh,并 cd 到相应目录:
 
  chmod +x ./test.sh  #使脚本具有执行权限
  ./test.sh  #执行脚本
  注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
 
  2、作为解释器参数
 
  这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
 
  /bin/sh test.sh
  /bin/php test.php
  这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
 
  Shell 变量
 
  定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
 
  your_name="runoob.com"
 
 
 
  使用变量
 
  使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
 
  your_name="qinjx"
  echo $your_name
  echo ${your_name}
  变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
 
  for skill in Ada Coffe Action Java; do
      echo "I am good at ${skill}Script"
  done
  如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
 
  推荐给所有变量加上花括号,这是个好的编程习惯。
 
  已定义的变量,可以被重新定义,如:
 
  your_name="tom"
  echo $your_name
  your_name="alibaba"
  echo $your_name
  这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。
 
  Shell 字符串
 
  字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
 
  单引号
 
  str=‘this is a string‘
  单引号字符串的限制:
 
  双引号
 
  your_name=‘runoob‘
  str="Hello, I know you are \"$your_name\"! \n"
  echo -e $str
  输出结果为:
 
  Hello, I know you are "runoob"!
  双引号的优点:
 
  拼接字符串
 
  your_name="runoob"
  # 使用双引号拼接
  greeting="hello, "$your_name" !"
  greeting_1="hello, ${your_name} !"
  echo $greeting  $greeting_1
  # 使用单引号拼接
  greeting_2=‘hello, ‘$your_name‘ !‘
  greeting_3=‘hello, ${your_name} !‘
  echo $greeting_2  $greeting_3
  输出结果为:
 
  hello, runoob ! hello, runoob !
  hello, runoob ! hello, ${your_name} !
  获取字符串长度
 
  string="abcd"
  echo ${#string} #输出 4
  提取子字符串
 
  以下实例从字符串第2个字符开始截取4个字符:
 
  string="runoob is a great site"
  echo ${string:1:4} # 输出 unoo
 
 
 
  定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
 
  your_name="runoob.com"
 
 
 
  使用变量
 
  使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
 
  your_name="qinjx"
  echo $your_name
  echo ${your_name}
  变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
 
  for skill in Ada Coffe Action Java; do
      echo "I am good at ${skill}Script"
  done
  如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
 
  推荐给所有变量加上花括号,这是个好的编程习惯。
 
  已定义的变量,可以被重新定义,如:
 
  your_name="tom"
  echo $your_name
  your_name="alibaba"
  echo $your_name
  这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。
 
  Shell 字符串
 
  字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
 
  单引号
 
  str=‘this is a string‘
  单引号字符串的限制:
 
  双引号
 
  your_name=‘runoob‘
  str="Hello, I know you are \"$your_name\"! \n"
  echo -e $str
  输出结果为:
 
  Hello, I know you are "runoob"!
  双引号的优点:
 
  拼接字符串
 
  your_name="runoob"
  # 使用双引号拼接
  greeting="hello, "$your_name" !"
  greeting_1="hello, ${your_name} !"
  echo $greeting  $greeting_1
  # 使用单引号拼接
  greeting_2=‘hello, ‘$your_name‘ !‘
  greeting_3=‘hello, ${your_name} !‘
  echo $greeting_2  $greeting_3
  输出结果为:
 
  hello, runoob ! hello, runoob !
  hello, runoob ! hello, ${your_name} !
  获取字符串长度
 
  string="abcd"
  echo ${#string} #输出 4
  提取子字符串
 
  以下实例从字符串第2个字符开始截取4个字符:
 
  string="runoob is a great site"
  echo ${string:1:4} # 输出 unoo
 
 
 
  练习一:写一个脚本
 
  1.设定变量FILE的值为/etc/passwd
 
  2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么
 
  形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`)
 
  Hello,root,your UID is 0.
 
  3.统计一个有多少个用户
 
  答案一:#!/bin/bash
 
  file="/etc/passwd"
 
  LINES=`wc -l $file | cut -d" " -f1`
 
  for I in `seq 1 $LINES`;do
 
  userid=`head -$I $file | tail -1 |cut -d: -f3`
 
  username=`head -$I $file | tail -1 |cut -d: -f1`
 
  echo "hello $username,your UID is $userid"
 
  done
 
  echo "there are $LINES users"
 
  答案二:#!/bin/bash
 
  file=/etc/passwd
 
  let num=0
 
  for I in `cat $file`;do
 
  username=`echo "$I" | cut -d: -f1`
 
  userid=`echo "$I" | cut -d: -f3`
 
  echo "Hello,$username,your UID is $userid"
 
  num=$[$num+1]
 
  done
 
  echo "there are $num users"
 
  练习二:写一个脚本
 
  1.切换工作目录至/var
 
  2.依次向/var目录中的每个文件或子目录问好,形如:
 
  (提示:for FILE in /var/*;或for FILE in `ls /var`;)
 
  Hello,log
 
  3.统计/var目录下共有多个文件,并显示出来
 
  答案:#!/bin/bash
 
  cd /var
 
  let num=0
 
  for I in `ls /var/*`;do
 
  echo "hello $I"
 
  num=$[$num+1]
 
  done
 
  echo "the number of files is $num"
 
  练习三:写一个脚本
 
  1.设定变量file的值为/etc/passwd
 
  2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容
 
  3.把这些行保存至/tmp/mypasswd文件中
 
  答案:#!/bin/bash
 
  file="/etc/passwd"
 
  for I in 2 4 6 10 13 15;do
 
  exec 3>/tmp/mypasswd
 
  line=`head -$I $file | tail -1`
 
  echo "$line"
 
  echo "$line" >&3
 
  exec 3>&-
 
  done练习四:写一个脚本传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商
 
  答案如下:vim test.sh
 
  #!/bin/bash
 
  echo "first number $1"(表示输出第一个数)echo "second number $2" (表示输出第二个数)
 
  echo " $(($1+$2))"(输出两数之和)
 
  echo "$[$1-$2]"(输出两数之差)
 
  echo "$[$1*$2]"(输出两数之积)echo "$[$1/$2]"(输出两数之商)
 
  :wq(表示保存并退出vi编辑器)
 
  chmod +x test.sh(给test.sh执行的权限)
 
  ./test.sh 2 3(传递两个参数并执行脚本作业一:写一个脚本:1.创建目录/tmp/scripts2.切换工作目录至此目录中3.复制/etc/pam.d目录至当前目录,并重命名为test4.将当前目录的test及其里面的文件和子目录的属主改为redhat5.将test及其子目录中的文件的其它用户的权限改为没有任何权限答案:
 
  #!/bin/bash
 
  mkdir -v /tmp/scripts
 
  cd /tmp/scripts
 
  cp -r /etc/pam.d ./test
 
  chown -R redhat ./test
 
  chmod -R o=--- ./test作业二:写一个脚本1.显示当前系统日期和时间,而后创建目录/tmp/lstest2.切换工作目录至/tmp/lstest3.创建目录a1d,b56e,6test4.创建空文件xy,x2y,7325.列出当前目录下以a,x或者6开头的文件或目录6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录答案:
 
  #!/bin/bash
 
  date
 
  mkdir -pv /tmp/lstest
 
  cd /tmp/lstest
 
  mkdir a1d b56e 6test
 
  touch xy x2y 732
 
  ls [ax6]*
 
  ls [[:alpha:]][[:digit:]]*
 
  作业三:写一个脚本
 
  添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加
 
  答案:
 
  #!/bin/bash
 
  for I in `seq 1 10`;do
 
  cut -d: -f1 /etc/passwd |grep "user$I" 2>>/tmp/etc.err || useradd user$I
 
  done
 
  作业四:写一个脚本
 
  通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线
 
  如果在线,就显示“ip is up”
 
  如果不在线,就显示“ip is down”
 
  答案: #!/bin/bash
 
  for I in `seq 151 254`;do
 
  ping -c1 -w1 192.168.0.$I &>/dev/null && echo "192.168.0.$I is up" ||echo "192.168.0.$I is down"
 
  done
 
 
 

(编辑:云计算网_梅州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!