shell基础

shell脚本

1.shell脚本执行方式

1.1 添加执行权

chmod u+x demo.h # 给demo.shell增加可执行权
./demo.shell # 直接运行

1.2 指定shell命令

bash demo.shell # 使用bash解释执行

2.shell变量

2.1 位置变量

预定义变量 含义
$0 shell脚本名
$1 ... 传递给脚本的参数,$1代表第一个参数

2.2 预定义变量

预定义变量 含义
$# 传递到脚本中参数数量
$* 传递到脚本的所有参数内容
$? 命令执行后返回的状态,0表示成功,其他值则表明其他执行错误
$$ 当前进程的进程号
$! 后台运行的最后一个进程号

2.3 命令替换

#将command运行结果赋值给var
#语法一
var = $(command)
#语法二
var = `command`

#例题一
echo "today is"`date`
today isSat Nov 14 12:36:07 CST 2020

#例题二
echo "User is `whoami`"
User is root

3.输入输出

3.1 read命令

read [选项] 命令列表
预定义变量 含义
-p 提示信息 设置提示信息
-n 数字 当read读多少个字符后返回
-s 键盘输入屏幕不显示,用于密码输入
-t 超时时间 设置超时时间
-r 取消转译字符的转义作用
-d delim 定义新的换行符

3.2 echo命令

echo [选项] 字符串

4.shell中的引号

1.反引号

#命令替换
var1=`ls -l`
echo `pwd`

2.单引号

#实例一:
echo *
tdyq xtdyq
#实例二:
echo '*'
*
#实例三:
text='* mean all files'

echo $text
tdyq xtdyq mean all files

echo '$text'
$text
#单引号中有只有特殊含义的字符的时候不会进行转义,特殊字符加字符串的形式会进行转义

3.双引号

#在双引号中除了$ 反引号`和反斜杠\ 其余都保留原来的含义
#实例一: $text 内容被替换
text='whoami'
echo "* $text end"
* whoami end

echo "`$text`"  #先替换再转译
root

echo "\$text" #\ 转译字符
$text

#实例二:加双引号和不加双引号的区别
echo "*"
*
echo *
tdyq xtdyq

5.条件表达式

#语法一:
test 条件表达式
#语法二:
[条件表达式]

5.1文件状态操作符

-d # 目录
-f # 文件
-r # 可读
-s # 文件长度大于0 返回真
-u # SUID被设置,返回真
-w # 可写,返回真
-x # 可执行,返回真

5.2字符串操作符

string # string非空,返回真
-n string # string的长度大于0,返回真
-z string # string长度为0,返回真
string1 = string2 # 相等返回真
string1!=string2 # 不等放回真

5.3数字操作符

5.4逻辑操作符

-a #且
-o #或
! #非

5.6命令操作符

cmd & #命令后台运行

6.判断语句

6.1条件语句

#语法一:
if [ 条件表达式 ]
    then 
        命令
    else
        命令
fi

#语法二:
if [ 条件表达式 ];then
    命令
fi

#语法三:
if test 条件表达式1
    then
        命令
    elif[ 条件表达式2 ]
    then
        命令
    else
        命令
fi

练习1:判断当前目录下是否存在某文件

#!/bin/bash
echo "Enter a file name"
read file
if test -f $file
then 
    echo "File $file exists"
fi

练习2:在文本中查找字符串

 #!/bin/bash
 if grep "GNU" myfile>/dev/null
 then
   echo "\"GNU\"occurs in myfile"
 else
 echo
 echo "\"GNU\"does not occur in myfile"
 fi

6.2分支语句

case 变量 in
    值1)
        命令
        ;;
    值2)
        命令
        ;;
esac

练习1:使用分支语句判断上下午

  #!/bin/bash
   hour='date+%H'
   case $hour in
   0[1-9]1[01])
           echo "早上"
           ;;
   1[2-7])
         echo "下午"
          ;;
 *)
          echo "晚上"
          ;;
  esac

6.3循环语句

6.3.1 for循环

for 变量名 in 参数列表
do
    命令
done

6.3.2算术表达式

expr 1 + 2

6.3.3 while循环

while [ 条件表达式 ]
do
    命令
done

6.3.4 until 语句

until [ 条件表达式 ]
    do
        命令
    done

6.3.5 函数

函数名(){
    命令
    return
}

补充:向shell脚本中传递参数

vim test4.sh
#!/bin/bash
file=$1
if test -f $file
then 
    echo "File $file exists"
fi
./test4.sh test1.sh 
File test1.sh exists
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 磁盘位置 vim test.sh $0 表示文件所在位置信息 ./test.sh%表示删除从后匹配的最小字符串,...
    宇宙小神特别萌阅读 387评论 0 2
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 1,282评论 0 0
  • shell脚本基础 shell脚本可以输入多个命令并处理每个命令的结果。 创建shell脚本时,需要在文件的第一行...
    伊落阅读 393评论 0 0
  • Shell 编程中三种引号的作用 单引号 ‘ ’:其中内容是字符串,没有shell的特殊含义; 双引号“ ”:其中...
    倔强swj阅读 293评论 0 0
  • shell概述 定义:shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系...
    绪_c150阅读 224评论 0 1