美文网首页
Shell入门

Shell入门

作者: 大写的空气 | 来源:发表于2021-08-04 13:55 被阅读0次

Shell

#!是一个约定的标记,告诉系统这个脚本需要什么解析器来执行
创建shell脚本文件可以在终端运行touch test.sh、再打开open test.sh
可以通过

chmod +x ./test.sh  //使脚本有执行权限
./test.sh

或者sh test.sh, bash test.sh

变量

Name=“这是个名字” # =两边不要留下空格
readonly Name # 如果需要变量为已读变量, 使用readonly
echo $Name #输出变量
unset Name #删除变量,后续不会打印
echo $Name #不会打印出任何信息

字符串

可以用单引号或者双引号。单引号里的任何字符都会原样输出,内如再包括一对单引号,可以做字符串拼接,双引号里面可以有变量,也可以有转义字符
name=“名字”
greeting = “hello {name} !” #使用双引号拼接 hello 名字 ! greating_1 = ‘hello, ‘name’ !’ #使用单引号拼接 hello 名字 !
获取字符串长度: ${#name}
提取字符串: #{string:0:1} #字

数组

用括号表示数组或者直接下标赋值
Array=(1, 2, “3”, ‘d’)
Array[0]=10
echo {Array[0]} echo{Array[@]} #输出所有数组
数组个数: ${#Array[@]}${#Array[*]}
单个元素长度: ${#Array[0]}

多行注释

:<<EOF
这里的内容会被注释
EOF
:<<‘
还可要这样注释

参数

$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。
如"*"用「"」括起来的情况、以"1 2 …n"的形式输出所有参数
$@*相同,但是使用时加引号,并在引号中返回每个参数。 如"@"用「"」括起来的情况、以"1" "2" … "$n" 的形式输出所有参数

运算符

两数之和: val=expr 2 + 2 #加号前后需要有空格
-eq两个数是否相等
-ne两个数是否不相等,不相等返回true
-gt 左边是否大于右边
-lt左边是否小于右边
-ge左边是否大于等于右边
-le左边是否小于等于右边
-o或运算
-a与运算
-z检测字符串长度是否为0.如 [ -z a ] `-n`字符串长度是否不为0 if [a -le b ] then echo “a小于等于b” fi —- 文件检测运算符 `-c`文件是否为字符设备文件 [ -cfile ]
-d是否为目录
-r是否可读
-s文件是否为空,不为空返回true
-e是否存在

file=“/var/www/runoob/test.sh”
if [ -r $file ] then
    echo “文件可读”  #echo后面可以不带双引号输出
fi

echo

echo 后面直接字符串输出时,可以不带双引号
echo -e “ok! \c”
echo “不换行”
echo “显示结果定向至文件” > myfile

条件语句

if [ $a == $b ]
then
    echo “a 等于 b”
elif [ $a -gt $b ]
    echo “a 大于 b”
fi

如果需要写成一行,用分号隔开
if [ $a == $b ]; then echo "a 等于 b"; elif [ $a -gt $b ]; echo "a 大于 b" fi

循环语句

for loop in 1 2 3 4 5 #也可以使用while, 将本行换成 while(condition)
do
  echo "value is: $loop"
done

until循环与while循环相反,一直执行,直到条件为真

a=0
until [ ! $a -lt 10 ]
do
  echo $0
  a=`expr $a + 1`
done

case语句与c的switch语句类似

read num
case $num in
  1)  echo '你选择了1'
  ;;
  2)  echo '你选择了2'
  ;;
  *)  echo '你输入了1、2外的其他值'
  ;;
esac

跳出循环使用break或continue

函数

demoFun(){
  echo '这是个shell函数'
  echo '带参数$1'  #1
}
demoFun  #执行函数
demoFun 1 2 3 4 5   #这里带参数执行函数

重定向

echo "这些文字" > file      #file文件保存字符串,会覆盖
echo "这些文字" >> file   #文件末尾保存,不覆盖
command > /dev/null  # 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null

相关文章

网友评论

      本文标题:Shell入门

      本文链接:https://www.haomeiwen.com/subject/uuzyvltx.html