shell常用语句1

一、常见符号

$0    当前脚本的文件名
$n    传递给脚本的参数n,比如$1表示第一个参数
$#    传递给脚本或函数的参数个数。
$*,$@ 传递给脚本或函数的所有参数
$?    上个命令的退出状态,或函数的返回值。
$$    当前Shell脚本所在的进程ID

示例:

#!/bin/bash

for var in $*
do
   echo "$var"           #for循环打印所有参数
done

二、命令分隔符分号";"

  • 作用:可以在同一行上写两个或两个以上的命令

示例:

if [ "$filename" == "$1" ]; then     #执行两条命令
echo "File $filename exists.";fi

三、双分号";;"

  • 作用:用在case语句,类似于C里面的case,用来承担break作用

shell的case语法如下所示:

case "变量" in
  "变量1")
      ...
  ;;          #这里的双分号类似于break

  "变量2")
      ...
  ;; 

  *)          #匹配剩下的变量n
     ...
  ;; 
esac        #case结束语句

示例:

#!/bin/base

variable=xyz

case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;; 
esac

打印:

$variable = xyz

四、单引号'和双引号"

  • 单引号: 将会阻止所有特殊字符的解释,被单引号括住的内容都是普通字符串
  • 双引号: 引号包围起来的字符串,部分特殊字符将起到它们的作用

示例:

#!/bin/bash

a="this is a"
b="this is b"

echo '${a}'
echo "${b}"

打印:

${a}
this is b

五、反引号`和$()

  • 作用:都是用来实现命令替换的,可以通过这个将命令的输出赋值到一个变量中去

示例:

echo $(date "+ %Y/%m/%d %H:%M:%S")     #运行date命令
echo `date "+ %Y/%m/%d %H:%M:%S"`      #运行date命令
c=$(echo hello)                        #打印: c=hello

六、\({}和\)

  • 作用:都是变量替换,不过${}的好处在于,可以精确变量名称(也可以实现字符串替换等,下章来学习)

示例:

A=123

echo $AB      #错误,将打印空的一行,因为运行时默认会去找变量值AB的解释
echo ${A}B    #正常打印:123B

七、冒号:

  • 作用:空命令,一个什么都不干的命令,该命令的返回值为0(true).

示例一:

:
echo $?    # 打印上个命令的返回值,为0

由于冒号的返回值为0,所以可以通过>将一个文件清空,但是不会修改该文件权限
示例二:

: > data.xxx         #如果该文件不存在,则会创建, 与cat /dev/null >data.xxx的作用相同

八、小括号()

8.1当用作命令组时

()会启动一个子shell顺序运行,需要注意的是, 由于()里的变量位于子shell中,并不是当前shell中,所以退出()后,变量还是不会变的
示例:

a=1
(a=2; echo "a = $a")    #打印a=2
echo "a = $a"           #打印a=1,说明变量a并没有改变

8.2当用作初始化数组时

示例-遍历数组:

arr=(1 2 3)             #等价于array[0]=1 array[1]=2 array[2]=3

for(( i=0;i<${#arr[@]};i++)) 
do
echo ${arr[i]};
done;

8.3当用作命令替换时

示例:

echo $(date "+ %Y/%m/%d %H:%M:%S")    #运行date命令

九、双括号(())

9.1用于for循环时

示例:

for(( i=0;i<5;i++));do
echo $i;done

9.2转换运算进制时,可以通过(())将任意数据转为10进制

示例:

echo $((16#ff))    #打印255

9.3 用于整数判断时

示例:

if (("$a" < "$b"))
if (("$a" <= "$b"))
if (("$a" > "$b"))
if (("$a" >= "$b"))

十、大括号{}

10.1当用做代码块时

像一个匿名函数,但是{}里的变量对其它代码来说是可见的, 并且不会开启新的子shell
示例1:

a=1
{
   a=2
   echo "a = $a"   #打印a=2
} 
echo "a = $a"      #打印a=2,说明已被修改

示例2-写入文件:

#!/bin/bash
{
echo 'hello'
echo 'this is test file'
echo 'end'
}  > ./test

打印:

cat test内容
hello
this is test file
end

10.2当用做遍历时

示例:

echo {1..10}        #打印1 2 3 4 5 6 7 8 9 10
for var in {a..z}
do
echo $var           #打印a~z字母
done

10.3也可以用作字符变量截取替换时

未完待续,在下一章将学习.

十一、[ ]和[[]]之间的条件测试区别

11.1 [ ]的参数有以下几种

  • -z: 判断字符串长度为0则为真
  • -n: 判断字符串长度非0则为真
  • -o: 或
  • -a: 与
  • -x: 可执行
  • -r: 可读
  • -w: 可写

11.2当用作文件判断时,有以下几种参数:

  • -e filename :如果 filename存在,则为真
  • -d filename :如果 filename为目录,则为真
  • -f filename :如果 filename为常规文件,则为真
  • -L filename : 如果 filename为符号链接,则为真
  • -r filename :如果 filename可读,则为真
  • -w filename :如果 filename可写,则为真
  • -x filename :如果 filename可执行,则为真
  • -s filename :如果文件长度不为0,则为真
  • -h filename :如果文件是软链接,则为真  
  • filename1 -nt filename2 :如果 filename1比 filename2新,则为真。
  • filename1 -ot filename2 :如果 filename1比 filename2旧,则为真。

示例-检查当前目录的test文件是否存在:

#!/bin/bash

testfile="${PWD}/test"

if [ -e "$testfile" ];then
      echo " $testfile is exist"
fi

11.3 在比较整数时,都使用-eq -ne –gt –ge –lt -le等

示例:

//-eq 判断等于(equal)
if [ "$a" -eq "$b" ]

//-ne 判断不等于(no equal)
if [ "$a" -ne "$b" ]

//-gt 大于(greater than)
if [ "$a" -gt "$b" ]

//-ge 大于等于
if [ "$a" -ge "$b" ]

//-lt 小于(less than)
if [ "$a" -lt "$b" ]

//-le 小于等于
if [ "$a" -le "$b" ]

11.4比较字符串时,只能使用!=和=,如果使用大于小于时,则需要加  转义

示例:

a="abcde"
b="abc"

if [ -n "$a" -o "$a" \> "$b" ] #判断a非0,且a>b
then
echo "a > b"
fi

11.5而[[]]也能适用于整数和字符串,而且对于整数或者字符串而言,它们都可以支持&&、||、、!=、==

示例:

a=11
b=11
c="abc"
e="abcd"

if [[ "$a" == "$b" && "$c" < "$e" ]]
then
echo "a = b,c < e"
fi

十二、波浪号~

  • ~ 为home目录
  • ~+ 为当前目录,等价于$PWD

示例:

A=~
B=~+
echo $A            #打印home目录
echo $B            #打印当前目录

十三、延时

  • 在shell中,延时使用sleep命令

示例:

sleep 1     #延时1秒
sleep 0.5   #延时0.5秒
sleep 1m    #睡眠1分
sleep 1h    #睡眠1小时

十四、变量赋值时的注意

  • 如果变量里存在空白,则必须加上引用
    示例:
a= 1 2 3     #将会出错,正确的用法应该是a="1 2 3"

十五、printf命令使用

在shell中可以通过printf来获取/打印数据的格式
使用示例1:

printf %d 0xF    //16进制转换成10进制
15

printf %x 15   //10进制转换成16进制
f

printf %o 9       //10进制转换成8进制
11

示例2-随机获取一串12位的十六进制数(结果:每次运行则打印不同的数据):

#!/bin/bash

# 每次调用$RANDOM都会返回不同的随机整数.
# 一般范围为: 0 - 32767 (有符号的16-bit整数).

hwadr=""
for(( i=0; i<12; i++ ));do
        hw[i]=$(($RANDOM%16));
        a=$(printf %x ${hw[i]})
        hwadr=${hwadr}${a}
done

echo $hwadr

转载于:https://www.cnblogs.com/princepeng/p/11578652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值